package org.dreamwork.cai.io;

import org.dreamwork.cai.srf.ServiceRouteFrame;

import java.io.IOException;

/**
 * 路由广播器.
 *
 * <p>向本地网络广播本地暴露的服务路由表，并接收本地其他节点的路由表广播</p>
 * 实现建议：
 * <ul>
 *     <li>定期发送心跳</li>
 *     <li>服务启动时，广播启动消息</li>
 *     <li>当路由表发生变动时，第一时间广播到本地网络</li>
 *     <li>当服务停止时，广播{@code 路由撤销}消息</li>
 * </ul>
 */
public interface IRouteBroadcaster extends IBindable {
    /**
     * 广播本地服务路由帧
     * @param frame 本地服务路由帧
     * @throws IOException io 异常
     */
    void update (ServiceRouteFrame frame) throws IOException;

    /**
     * 广播心跳
     * @throws IOException io 异常
     */
    void heartbeat () throws IOException;

    /**
     * 广播服务路由撤销消息
     * @throws IOException io 异常
     */
    void withdrawn () throws IOException;
}